package com.catazy.base.presentation.ext

import android.content.Context
import android.content.Intent
import android.widget.Toast
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import kotlin.reflect.KProperty1

/**
 * Toast扩展
 * @param resId 文本资源id
 * @param length 显示时长
 */
fun Context.toast(@StringRes resId: Int, length: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, getString(resId), length).show()
}

/**
 * 启动Activity
 * @param params 参数
 * 注释：使用 inline 关键字和 reified 修饰符来确保泛型类型在运行时可用
 */
inline fun <reified T : AppCompatActivity> Context.startActivity(
    vararg params: Pair<KProperty1<out Any?, Any?>, Any?>,
) {
    // it.first.name - 获取属性引用的名称
    // it.second - 获取属性对应的值
    // it.first.name to it.second：将属性名称和对应的值组成一个新的键值对
    val extras = params.map { it.first.name to it.second }.toTypedArray()
    val intent = Intent(this, T::class.java)
    // 用于抑制特定的代码检查警告或错误
    @Suppress("detekt.SpreadOperator")
    intent.putExtras(bundleOf(*extras))
    startActivity(intent)
}